package yuva_officeinventory;

import data.TMC;
import data.TMC_List;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.io.*;

public class IOExcel extends Component {

    public static int exportFromTableModel(DefaultTableModel tableModel, String fileName){
        Workbook workbook = new HSSFWorkbook();
        Sheet sheet = workbook.createSheet("Inventory");

        Cell cell;

        Row row = sheet.createRow(0);
        for (int i = 0; i < tableModel.getColumnCount(); i++) {
            cell = row.createCell(i);
            cell.setCellValue(tableModel.getColumnName(i));
        }

        for (int i = 0; i < tableModel.getRowCount(); i++) {
            row = sheet.createRow(i + 1);
            for (int j = 0; j < tableModel.getColumnCount(); j++) {
                cell = row.createCell(j);
                    cell.setCellValue(tableModel.getValueAt(i, j).toString());
                sheet.autoSizeColumn(j);
            }
        }

        //записываем в файл
        try{
            if (fileName.lastIndexOf(".xls") != (fileName.length()-4)){
                fileName += ".xls";
            }
            FileOutputStream output = new FileOutputStream(fileName);
            workbook.write(output);
            output.close();

        }catch (Exception e){
            e.printStackTrace();
            return (-1);
        }

        return tableModel.getRowCount();
    }

    public static int importToTMCList(TMC_List tmcList, String fileName) throws IOException {
        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fileName));
        HSSFWorkbook workbook = new HSSFWorkbook(fs);
        HSSFSheet sheet = workbook.getSheetAt(0);
        HSSFRow row;

        row = sheet.getRow(0);

        int maxCol = 0;

        //получаем шапку таблицы (в дальнейшем можем проверить на корректность данных
        while (row.getCell(maxCol) != null){
            maxCol++;
        }
        maxCol--; //Колонок на 1 меньше, т.к. последний пробег с cell=null

        //проверка корректности загружаемого файла
        if (maxCol != 7) return (-1);

        int currentRow = 1; //начинаем читать со второй строки
        while ((row = sheet.getRow(currentRow)) != null){
                TMC tmc = new TMC();
                if (tmc.addFromRow(row)){
                    tmcList.addTMC(tmc);
                }else {
                    JOptionPane.showMessageDialog(null, "Ошибка загрузки данных\n - "+row.getCell(3).getNumericCellValue());
                }
                currentRow++;
        }

        return currentRow--; //Возвращаем количество загруженных элементов

    }
}
